Fleetrun
Hecterra
NimBus
Другие приложения
Wialon для Android/iOS
Logistics
Wialon Local
Wialon Hosting
WiaTag
Configurator
LeaseControl
Содержание
Как выбрать параметр датчика
  • technical_consulting
  • sensor_parameters
  • sensor_types

Если вы знаете тип устройства, его конфигурацию и то, как оно было установлено, то вы можете знать, какой параметр выбрать для датчика в Wialon. Но если вы начали работать с Wialon недавно и у вас есть сомнения, то эта статья может помочь вам подобрать параметр, исходя из того, как это обычно делают другие пользователи.

Общие рекомендации

  1. Список параметров и их описание можно найти на странице конкретного устройства на сайте wialon.com в разделе Оборудование. Для этого введите в строку Поиск оборудования нужную модель устройства. Также можно выбрать одну из категорий типов оборудования и найти нужную модель в списке. После на странице оборудования перейдите на вкладку Параметры (пример такой страницы для WiaTag).

    Если на странице оборудования отсутствует описание параметров, обратитесь к специалистам по оборудованию через почту hw@wialon.com.
  2. В большинстве случаев понять содержание параметра можно по его английскому наименованию. Например, в параметре fuel_lvl наиболее вероятно будет отображаться значение уровня топлива, в параметре total_mileage — значения датчика пробега, и т.д. Наименования параметров, полученных из CAN-шины, обычно начинаются с префикса can

  3. Параметры, которые передает устройство, могут быть описаны в документации к оборудованию. Документация, как правило, представлена на сайте производителя.

  4. Существует список виртуальных параметров, которые определены в системе по умолчанию и подходят практически для любого типа оборудования:
    • speed — скорость движения;
    • altitude — высота над уровнем моря;
    • sats — количество спутников;
    • course — курс (направление движения);
    • lat — географическая широта;
    • lon — географическая долгота;
    • time — UNIX-время сообщения;
    • regtime — время регистрации сообщения на сервере.

Метод поиска и проверки выбранного параметра зависит от типа датчика, в котором он используется. Ниже мы рассмотрим несколько примеров для наиболее часто используемых типов датчиков.

Датчик зажигания

Датчик зажигания — это цифровой датчик, который показывает, запущен двигатель или нет. Когда значение цифрового датчика принимает нулевое значение, он считается выключенным, а когда значение принимает ненулевое значение, датчик считается включенным.

Датчик зажигания не отображает положение ключа зажигания «ACC», при котором двигатель не заведен, но дополнительное оборудование уже доступно для использования.

В качестве параметра для Датчик зажигания может подойти один из цифровых входов (в конце сообщений параметр формата I/O). I/O описывает состояние всех цифровых входов и выходов одновременно, и по нему можно определить состояние конкретного цифрового входа inN (логика выбора номера входа N описана в другой статье).

Также можно попробовать создать датчик зажигания на основе параметра, отображающего внешнее напряжение (обычно он называется pwr_ext). В таком случае в свойствах датчика необходимо создать Таблицу расчета. В руководстве пользователя приведен пример такой таблицы. При использовании данного примера нужно лишь изменить пороговое значение напряжения, при достижении которого зажигание будет считаться включенным.

Практический метод выбора и проверки параметра

  1. Выключите двигатель и дождитесь получения нескольких сообщений от трекера.
  2. Включите двигатель и дождитесь поступления еще нескольких сообщений.
  3. Сравните сообщения, полученные в пункте 1 и 2. Если скачкообразно изменился только один параметр, то наиболее вероятно, что он и будет показывать состояние зажигания. Если изменилось несколько параметров, то выбрать нужный можно с помощью дополнительной проверки, описанной в следующем пункте.
  4. Изучите сообщения с ненулевой скоростью. Предполагается, что зажигание включено при наличии скорости, а также в нескольких сообщениях до и после наличия скорости. При этом рекомендуется рассматривать интервалы длительностью хотя бы от пяти минут, так как некоторые трекеры могут менять режим отправки сообщений после начала и завершения движения.
 Пример

От объекта поступили сообщения со следующими параметрами:


Скоростьparam1param2param3
15526.00301000
25626.00401020
35726.00511015
4026.00611004
5026.0071476
6026.0080489
71026.00901001
81126.01011004

Предположим, что зажигание у объекта было выключено в 5-м и 6-м сообщении (выделены красным цветом). В остальных сообщениях зажигание включено (выделены зеленым цветом).

param1  значение постоянно увеличивалось на всех интервалах, скачкообразные изменения отсутствуют, связи с наличием или отсутствием скорости нет. Следовательно, данный параметр не может быть использован для датчика зажигания.

param2  изменялся на всех трех интервалах, при наличии скорости в сообщениях принимал нулевое значение, хотя в этот момент зажигание должно быть включено. Следовательно, данный параметр не может быть использован для датчика зажигания.

param3  на интервалах, когда зажигание предполагается включенным, параметр принимает значение более 1000, а на интервалах, когда зажигание выключено, значение скачкообразно падает до уровня менее 500. Следовательно, можно попробовать использовать данный параметр в датчике зажигания, применив таблицу расчета.

Датчики для учета пробега

На данный момент в Wialon существует два датчика для учета пробега:

  • Датчик пробега отображает весь пробег объекта с момента установки датчика.
  • Относительный одометр отображает пробег между рассматриваемым и предыдущим сообщениями.

Если устройство присылает параметры сразу для обоих упомянутых типов датчиков, то показания одометра необязательно должны полностью совпадать с разницей, которая получается при вычитании показаний датчика пробега в двух соседних сообщениях. Это связано с тем, что алгоритм расчета у датчиков может различаться со стороны самого устройства. Для демонстрации пользователю рекомендуется выбирать тот датчик, который показывает более достоверные результаты.

Оба датчика для учета пробега используют в качестве единиц измерения километры (или мили). Если приходящий параметр имеет другие единицы измерения, то необходимо применить коэффициент для перевода входящих значений в километры (или мили). Например, если параметр can_odo отображает значение в метрах, то в строку Параметр в свойствах датчика необходимо будет записать следующую формулу для перехода к километрам: can_odo/const1000

Практический метод выбора и проверки параметра

Чтобы проверить, правильно ли выбран параметр для Датчика пробега или Относительного одометра, можно использовать инструмент Расстояние. Значения параметров и измеренное между двумя сообщениями расстояние чаще всего не совпадает полностью, но являются соизмеримыми. Это связано с тем, что инструмент Расстояние математически рассчитывает расстояние между двумя точками с выбранными координатами, а датчики, как правило, считают пройденные километры, исходя из количества вращений колеса и его диаметра.

Параметр можно использовать в Датчике пробега, если

  • его значение не изменяется, когда объект стоит;
  • его значение увеличивается при движении объекта;
  • разница его значений в двух соседних сообщениях соизмерима со значением, полученным при использовании инструмента Расстояние.

Параметр можно использовать в Относительном одометре, если

  • он равен нулю, когда объект стоит;
  • он имеет положительное значение, когда объект движется;
  • он имеет приблизительно равные значения, когда объект движется с одинаковой скоростью;
  • его значение соизмеримо со значением, полученным при использовании инструмента Расстояние.
 Пример

От объекта поступили сообщения со следующими параметрами:

Создайте Датчик пробега на основе параметра mileage, так как он постоянно растет в движении и не падает до нуля во время остановки.

Создайте Относительный одометр на основе параметра odo, так как он имеет разные значения в движении и падает до нуля во время остановки. Однако его значение кажется слишком большим, поэтому попробуйте применить формулу odo/const1000.

Измерьте пробег объекта между несколькими парами сообщений при помощи инструмента Расстояние, расположив измеряемые отрезки поверх трека.

Сравните полученные значения:

Датчик пробегаОтличие от предыдущего значения по датчику пробегаОтносительный одометрИнструмент Расстояние
16801.54 км1.00 км
26802.52 км6802.52 - 6801.54 = 0.98 км1.00 км1.000 км
36803.51 км6803.51 - 6802.52 = 0.99 км1.00 км1.020 км
46804.00 км6804.00 - 6803.51 = 0.49 км0.50 км0.500 км
56804.20 км6804.20 - 6804.00 = 0.20 км0.50 км0.160 км
66804.20 км6804.20 - 6804.20 = 0.00 км0.00 км-

Значения приблизительно равны, а потому можно предположить, что параметры для обоих датчиков выбраны верно.
Обратите внимание, что у разных датчиков может быть разная точность. В таком случае в Счетчике пробега и Детекторе поездок рекомендуется использовать тот датчик, который присылает показания, наиболее близкие к предполагаемым.

Топливные датчики

На данный момент в Wialon существует несколько типов топливных датчиков:

  • Датчик абсолютного расхода топлива (ДАРТ) показывает расход топлива за весь период эксплуатации объекта. Следовательно, для получения данных о расходе за конкретный период используется следующий алгоритм: вычисляется разница показаний датчика в конце и в начале рассматриваемого интервала.
  • Датчик мгновенного расхода топлива (ДМРТ) показывает количество израсходованного топлива с момента предыдущего измерения (сообщения). Следовательно, для получения данных о расходе за конкретный период используется следующий алгоритм: вычисляется сумма показаний датчика во всех сообщениях на рассматриваемом интервале.
  • Импульсный датчик расхода топлива (ДИРТ) — принцип работы этого датчика аналогичен ДМРТ.
  • Датчик уровня топлива (ДУТ) предназначен для расчета количества топлива в баке. По нему можно считать расход, а также контролировать сливы и заправки.
  • Импульсный датчик уровня топлива (ИДУТ), как и предыдущий датчик, предназначен для расчета количества топлива в баке. По нему можно считать расход, а также контролировать сливы и заправки. Отличие от ДУТ заключается в том, что при расчете используются данные из предыдущего сообщения, и разница значений импульсов двух соседних сообщений делится на разницу времени между ними. Данный тип датчика почти не применяется на практике — вместо него большинство пользователей предпочитают обычный ДУТ.

Если устройство присылает параметры сразу для нескольких упомянутых типов датчиков, то их показания, а также результаты вычисления по ним могут различаться. Это связано с разницей методов измерения, а также особенностями работы с топливом. Для демонстрации пользователю рекомендуется выбирать тот датчик, который показывает более достоверные результаты.

Информация о топливе может содержаться в параметрах со следующими именами: fuel_lvlfuel_usedcons_totalcan_fuelrs485_llsadc1adc2 и т.п.

Выбирать тип датчика необходимо, исходя из того, как меняется значение параметра. Рассмотрим различное поведение параметров ниже.

ДАРТ

Параметр можно использовать в Датчике абсолютного расхода топлива, если

  • его значение не изменяется, когда двигатель не работает;
  • его значение увеличивается во время работы двигателя;
  • его значение растет быстрее при движении или работе под нагрузкой, чем при остановке или отсутствии нагрузки.

ДМРТ и ДИРТ

Параметр можно использовать в Датчике мгновенного расхода топлива или Датчике импульсного расхода топлива, если

  • он равен нулю, когда двигатель не работает;
  • он имеет положительное значение, когда двигатель работает;
  • он имеет приблизительно равные значения, когда объект движется с одинаковой скоростью или работает под одинаковой нагрузкой.

ДУТ

Параметр можно использовать в Датчике уровня топлива, если

  • его значение не меняется, когда двигатель не работает;
  • его значение постепенно уменьшается, когда двигатель работает;
  • его значение падает быстрее при движении или работе под нагрузкой, чем при остановке или отсутствии нагрузки;
  • его значение колеблется вокруг фактического значения при работе двигателя и движении;
  • его значение резко растет во время заправки.

В отличие от датчиков расхода топлива параметр от ДУТ может вести себя не так, как описано выше, потому что во время остановки или движения может осуществляться слив топлива, объект может двигаться под наклоном, температура может значительно меняться в течение дня, в топливе могут содержаться примеси и т.д. Подробнее о проблемах при контроле топлива и методах их решения можно почитать в разделе Статьи экспертов → Топливо.

Ниже приведен пример графика изменения параметра ДУТ, который захватывает интервалы поездки и заправки.

В некоторых случаях параметр ДУТ ведет себя противоположным образом: при работе двигателя его значение растет, а при заправке — падает. Это отличие будет нивелировано после проведения тарировки бака и внесения ее результатов в Таблицу расчета.

Екатерина Гриб,Инженер Customer Service

Как выбрать номер цифрового входа/выхода (I/O)
  • technical_consulting
  • sensor_parameters

Цифровой вход и цифровой выход являются контактами (пинами разъема), на которые подается напряжение только двух уровней: один из них соответствует включенному состоянию (1, или Вкл), а второй — выключенному (0, или Выкл). Исходя из этого, цифровые входы и выходы используют для подключения к трекеру устройств или схем, которые передают только два возможных состояния. Например, к цифровому входу трекера можно подключить датчик состояния двери, чтобы трекер мог определить, открыта она или нет. А к цифровому выходу трекера можно подключить противоугонное устройство, который будет управляться трекером и блокировать зажигание.

Отмечу, что если клиенту требуется точное числовое значение, то нужен аналоговый разъем. Потому что если, например, для ДУТ использовать цифровой вход, то вы лишь сможете узнать, есть ли в баке топливо или нет.

Количество цифровых входов и выходов на трекере может быть довольно большим (например, у Galileosky 7-го поколения в зависимости от модификации и конфигурации может быть от 6 до 10 цифровых входов). Поэтому у пользователей часто возникает вопрос: к какому цифровому входу или выходу монтажник подключил интересующее клиента устройство? С помощью инструкции ниже вы сможете получить требуемый ответ.

Отображение цифровых входов/выходов

Вначале стоит отметить, что состояние цифровых входов и выходов в Wialon представлено в виде двух шестнадцатеричных чисел (HEX), получаемых из двоичных чисел (BIN), в которых каждому биту соответствует вход/выход с таким же номером. Параметр с этими значениями имеет имя I/O (сокращение от Inputs/Outputs) и содержит в себе два числа, разделенных косой чертой: слева от нее располагается значение, соответствующее состоянию всех входов, а справа — состоянию выходов.

Почему выбрана такая реализация? Давайте разберемся на примере.

Предположим, что к цифровым входам 1, 3, 4 и 7, а также выходам 1, 3, 6 и 8 подключено оборудование. Также предположим, что в рассматриваемом сообщении все упомянутые входы и выходы активированы. Если бы для каждого из них использовался отдельный параметр в сообщении, то вы бы увидели следующее:

in1=1, in2=0, in3=1, in4=1, in5=0, in6=0, in7=1, in8=0, out1=1, out2=0, out3=1, out4=0, out5=0, out6=1, out7=0, out8=1

А в нынешней реализации в Wialon вы увидите следующую запись:

I/O=4D/A5

И очевидная краткость записи в данном случае является ключевым преимуществом.

Определение номера активированного цифрового входа/выхода

Если номер N входа или выхода известен, то соответствующий ему параметр будет иметь вид inN, а параметр выхода — outN. Например, параметр для четвертого входа — это in4, а для выхода — out4.

Однако если вам не известен номер входа или выхода, к которому подключено оборудование, то вы можете использовать один из двух методов: подбор или математический подход.

Подбор

При подключении оборудования монтажники чаще всего используют первые входы/выходы. То есть если речь идет про устройство или схему, которые передают информацию трекеру, то проверять стоит in1-in4, а если про устройство или схему, которыми управляет трекер, — out1-out4.

Для поиска нужного входа вы можете создать 4 датчика с типом Произвольный цифровой датчик на основе этих параметров (например, в первом датчике в строке Параметр будет in1, во втором — in2 и так далее). Затем перейдите в панель Сообщения, выберите тип сообщений Сообщения с данными и в меню ниже укажите Значения датчиков. После этого запросите сообщения за интервал, когда оборудование было сперва выключено, а потом включено, чтобы найти момент перехода из состояния Выкл в состояние Вкл в одном из столбцов, каждый из которых соответствует созданному датчику.

Это самый быстрый практический метод нахождения нужного входа (аналогично можно работать с выходами, но использовать в таком случае нужно параметры out1, out2 и так далее). Если он не сработал, то вы можете прибегнуть к математическому подходу.

Математический подход

Если вам неизвестен номер входа/выхода, к которому подключено оборудование, то вы можете воспользоваться следующей инструкцией:

1. Перейдите в панель Сообщения, выберите тип сообщений Сообщения с данными и в меню ниже укажите Исходные данные.
2. Запросите сообщения за интервал, когда оборудование было сперва выключено, а потом включено.
3. После отображения таблицы с сообщениями от трекера обратите внимание на колонку Параметры и найдите там параметр I/O (он расположен в самом конце строки).

Предположим, что в сообщении, где оборудование было выключено, параметр I/O=102/0, то есть цифровые выходы деактивированы (или даже не подключены), а некоторые цифровые входы активированы.

4. Откройте приложение Калькулятор (оно предустановлено на каждом компьютере, либо его аналоги можно найти в интернете) и переключите его в режим Программист (или аналогичный, который позволяет переводить значения из одной системы счисления в другую).
5. Переключите калькулятор на шестнадцатеричную систему счисления (HEX).
6. Введите найденное ранее значение 102.
7. Приложение автоматически (либо по нажатию клавиши ввода) представит вам данное число в разных системах счисления. Нас интересует запись в двоичном виде (BIN), которая состоит только из нулей и единиц.

8. Изучите полученное двоичное число. Учтите, что отсчет номера бита идет справа налево (как и в десятичной системе, где единицы находятся справа, слева от них находятся десятки, потом сотни, тысячи и так далее): 0001 0000 0010
9. Определите номера битов для данного числа (нумерация битов в Wialon начинается с 1):

Номер121110987654321
Значение000100000010

10. Из этой записи можно сделать вывод, что в данном сообщении активированы входы 2 и 9 (то есть in2=1, in9=1), а все остальные входы деактивированы (то есть их значение равно нулю).
11. Теперь найдите сообщение, в котором оборудование было включено. Предположим, что оно содержит параметр I/O=10A/0.
12. Повторите шаги 4-8 для значения 10A.

13. Определите номера битов для данного числа:

Номер121110987654321
Значение000100001010

14. В данном сообщении активированы входы 2, 4 и 9 (то есть in2=1, in4=1 и in9=1).
15. Сравните результаты шагов 10 и 14. Как несложно заметить, они отличаются лишь состоянием параметра in4, то есть в приведенном примере оборудование было подключено ко входу 4.

Использование цифровых входов/выходов

Параметр цифрового входа или выхода можно использовать так же, как и любой другой параметр.

При создании датчиков для цифровых входов/выходов больше всего подходят типы из группы Цифровые, так как они подразумевают только два состояния (Вкл и Выкл).

Уникальным методом использования, который доступен только для цифровых входов, является уведомление с типом Цифровой вход, для которого даже не нужно создавать датчик.

Олег Жарковский,Инженер Customer Service

Датчики: объяснение таблицы расчета
  • technical_consulting
  • calculation_table

Одним из первых и главных этапов работы с Wialon является настройка датчиков в объекте. Если правильно настроить датчики, то некоторые стандартные алгоритмы будут давать более точные результаты, и вы сможете использовать недоступный ранее функционал. В данной статье будет детально рассмотрена таблица расчета, инструмент с одноименной вкладки, так как при настройке датчиков чаще всего именно он вызывает трудности.

В статье содержится информация разной сложности. Основная часть будет полезна для понимания логики работы таблицы расчета. Однако желающие смогут найти здесь и более детальные математические формулировки, которые будут выделены в специальные блоки «Математическая минутка». Для общего понимания статьи читать эти блоки необязательно.

Общий принцип работы датчиков

Wialon поддерживает множество типов трекеров (актуальное количество можно найти на сайте wialon.com в разделе Оборудование), и каждый из них «говорит» на своем «языке». Поэтому параметры, которые приходят от разных трекеров и отображаются на вкладке Сообщения, могут содержать одну и ту же информацию (например о температуре или пробеге), но при этом иметь разные имена. Чтобы пользователь не замечал различий при использовании объектов с разными типами трекеров, для каждого объекта в Wialon необходимо создать датчики. Датчики имеют определенный тип, что позволяет системе понимать, какой алгоритм необходимо использовать для обработки приходящих параметров.

Однако зачастую просто выбрать тип датчика и указать в нем параметр оказывается недостаточно, потому что значение параметра приходит в неочевидном для пользователя виде. Например, temp=125 может означать 125°F, 125°C, 12.5°C или вообще −3°C. Для преобразования приходящего параметра в нужный вид существует 3 метода:

  1. Выражение в строке Параметр;
  2. Таблица расчета;
  3. Валидация.

Их можно использовать по отдельности или комбинировать. Если использовать несколько методов одновременно, то они будут применяться именно в том порядке, в котором они перечислены выше.

Схематично использование датчиков можно представить следующим образом:

  • Подключенный к трекеру датчик измеряет некоторую физическую величину, которую мы обозначим S.
  • Датчик преобразует эту величину и передает трекеру. От трекера в Wialon приходит параметр X.
  • На основе параметра в Wialon создается датчик. Чтобы получить понятное для пользователя значение Y, в датчике к параметру применяются преобразования f(X).
  • В идеале после преобразований в датчике значение Y=f(X) должно равняться величине S, которая измерялась на первом этапе. Далее Y будет использоваться во всплывающих подсказках, отчетах, уведомлениях и другом функционале Wialon.

Так как в этой статье рассматривается только настройка таблицы расчета в Wialon, то из приведенной выше схемы мы будем обращать внимание лишь на следующие элементы:

Когда используется таблица расчета

Как правило, таблица расчета используется в тех случаях, когда необходимо преобразовать входной параметр. Однако для этого служат все 3 упомянутых выше метода. В каком же случае стоит прибегать именно к таблице расчета?

С точки зрения практического применения можно сказать, что таблица расчета используется

  • для тарировочной таблицы (например для датчиков веса или уровня топлива);

  • для цифровых датчиков на основе аналоговых входных данных (например для датчиков зажигания на основе напряжения);

  • для датчиков на основе кодов, которые описывают разные состояния, но приходят в одном параметре (например device_status=4 означает включение зажигания, а device_status=13 — нажатие тревожной кнопки и т.д.);

  • для датчиков, которые должны отображать положительные и отрицательные значения, хотя связанный с ними параметр имеет только положительные значения (например для датчиков температуры);

  • для любых датчиков, в которых необходимо разделить диапазон корректных и ошибочных значений (например если датчик присылает особые значения в параметре, которые сигнализируют об ошибках).
 Математическая минутка

Другими словами, таблицу расчета стоит использовать, если

  • формула Y=f(X) неизвестна, но на практике были установлены соответствия между некоторыми X и Y;
  • формула Y=f(X) является слишком сложной (например содержит функции sin, cos, log и т.д., которые не поддерживаются в Wialon);
  • формула Y=f(X) имеет разный вид на разных интервалах и не может быть описана одной функцией;
  • необходимо разделить диапазон корректных и ошибочных значений.

Настройка таблицы расчета

Таблица расчета подразумевает работу с самыми простыми линейными функциями. То есть таблица расчета преобразовывает данные в соответствии со следующей формулой: Y=a⋅X+b — это один из вариантов уравнения прямой.

Если разобраться в том, как работает каждая составляющая этого инструмента, то с его помощью можно собирать достаточно полезные и необычные решения. Поэтому далее мы рассмотрим каждую область вкладки Таблица расчета в отдельности, визуализируя ее влияние на результат с помощью графика.

Чтобы увидеть график, который соответствует заполненной таблице расчета, нужно нажать на иконку  в верхней части вкладки.

Пары XY

В правой части расположен блок Пары XY. Его заполнения недостаточно для работы таблицы расчета, однако он может упростить ее настройку.

Мы рекомендуем использовать пары XY только для датчиков уровня топлива, чтобы вносить тарировочную таблицу. В иных случаях стоит самостоятельно рассчитывать и вносить значения X, a и b.

Добавлять пары можно как вручную, так и с помощью импорта CSV или TXT файлов (экспорт доступен только в CSV). После заполнения всех строк этого блока необходимо нажать на клавишу Генерировать (подразумевается «Генерировать таблицу расчета на основе пар XY»), что приведет к расчету значений X, a и b в левой части окна.

Каждая из добавленных пар XY соответствует точке на графике. Как вы можете знать, прямую можно провести через 2 точки. Следовательно, если внести 5 пар XY, то на графике получится 4 прямые.

Пары с одинаковым значением X вводить запрещено. Это технически невозможно, так как одному значению X не может соответствовать два или более значения Y. При этом вводить одинаковые значения Y можно.

X — входное значение

Центральный блок вкладки Таблица расчета содержит в себе строки со значениями X, a и b. Каждая из строк соответствует прямой на графике. Значение X в каждой строке означает начало новой прямой, то есть задает интервал, где будут использоваться новые значения a и b.

Последняя строка влияет на все дальнейшие значения до +∞, а первая строка влияет на значения даже до первого указанного X, то есть начиная с ∞. Поэтому писать несколько строк подряд с одинаковыми значениями a и b не имеет смысла.

В качестве примера рассмотрим таблицу со следующими значениями:

Иначе это условие можно записать так:

  • От ∞ до 3 (не включая) применяется уравнение Y=1⋅X-2.
  • От 3 (включая) до 5.5 (не включая) применяется уравнение Y=0⋅X+3.
  • От 5.5 (включая) до +∞ применяется уравнение Y=-0.5⋅X+2.

Пример графика, получаемого при заполнении таблицы расчета

a — коэффициент наклона прямой

При a=0 наклон будет 0°, то есть прямая будет параллельна оси X.
При a=1 наклон будет 45°, то есть чем больше будет коэффициент, тем ближе будет прямая к оси Y.
При a=-1 наклон будет 45°, то есть отрицательные значения этого коэффициента наклоняют прямую вниз, а положительные — вверх.

Пример графика прямой Y=a⋅X с разным коэффициентом наклона

Определить коэффициент наклона прямой бывает довольно просто: его значение равно отношению изменения Y к изменению X.

В качестве примера можно рассмотреть зеленую прямую на графике выше. По ней видно, что Y увеличивается с 0 до 1, когда X растет с 0 до 3, а значит для этой прямой коэффициент a=(1-0)/(3-0)=1/3=0.33.

b — смещение прямой по оси Y

При b=0 смещение отсутствует.
При b>0 смещение прямой происходит вверх относительно оси X.
При b<0 смещение происходит вниз.

Пример линий с разным смещением

При использовании пар XY значение b автоматически вычисляется таким образом, чтобы следующий отрезок прямой плавно продолжал предыдущий.

Вычислить значение b не получится так же просто, как коэффициент наклона, так как в большинстве случаев у него нет понятной аналогии вне математики кроме смещения прямой вверх или вниз.

Единственным исключением является случай, когда с помощью таблицы расчета настраивается цифровой датчик. В таком случае a=0, и формула принимает вид Y=b. Следовательно, значение b будет равно тому, что вы ожидаете увидеть в качестве Y.

Нижняя и верхняя границы

Границы позволяют отсечь ошибочные значения датчика по простому принципу: если значение выходит за диапазон между нижней и верхней границей, то датчик будет отображать прочерк (ошибку).

Рассмотрим пример с датчиком уровня топлива. Предположим, что значения параметра от 3 до 250 соответствуют объему топлива от 0 литров до 100 литров. А значения параметра 0 или 255 означают ошибки, которые мы хотим исключить, чтобы они не интерпретировалось как реальный объем (так как в рассматриваемом баке не может быть меньше 0 или больше 100 литров топлива). Для этого примера можно предложить решение с выключенной опцией Применять после расчета:

Также существует решение с включенной опцией Применять после расчета:

Так как нижняя граница входит в разрешенный диапазон, то мы можем указать значения из условия (3 или 0). Но верхняя граница в разрешенный диапазон не входит, поэтому в этом поле нужно указывать значение чуть больше, чем в условии (250.1 или 100.1).

Из примера можно понять, что опция Применять после расчета влияет на то, к каким значениям применяются границы: если она выключена, то отсеиваются значения по оси X (входные значения до применения таблицы расчета), а если она включена, то отсеиваются значения по оси Y (значения датчика после применения таблицы расчета).

Для визуализации работы границ рассмотрим еще один пример, в котором к одной и той же прямой применены одни и те же границы, а различие заключается только в опции Применять после расчета, которая значительно влияет на результат.

Нижняя граница равна 2, верхняя граница равна 3, опция «Применять после расчета» отключена

Нижняя граница равна 2, верхняя граница равна 3, опция «Применять после расчета» включена


Принцип работы таблицы расчета

Иногда, чтобы понять суть явления, следует пойти от обратного. Если нам известна точная формула Y=f(X), которая связывает входное и выходное значения на всем диапазоне, то прибегать к таблице расчета нет необходимости достаточно просто использовать выражение в строке Параметр. Давайте рассмотрим такой случай.

Для примера предположим, что входное значение связано с выходным следующей формулой: Y=0.5⋅X2.
В качестве параметра возьмем adc3. Чтобы описать такую формулу в Wialon, в строку Параметр нужно вставить следующее выражение: const0.5*adc3^const2

График функции Y=0.5⋅X2

Но что делать, если мы не знаем точную формулу Y=f(X)? Именно в таком случае нам поможет таблица расчета.

Предположим, что в определенных условиях мы знаем значения измеряемой величины (это будет Y) и можем проверить, какое значение будет принимать параметр в Wialon в этих точках (это будет X). Таким образом можно получить значения, например, в 4 точках: (0; 0), (1; 0.5), (2; 2), (3; 4.5). Далее нанесем эти точки (X, Y) на график и соединим их отрезками красного цвета.

Воспроизведение части функции Y=0.5⋅X2 отрезками, построенными по 4 точкам

Несложно заметить, что результат близок к тому, который получается по формуле, но все же отличия имеются. В некоторых случаях такой точности будет достаточно, а если ее не хватает, то можно измерить значения в большем количестве точек. На графике ниже приведен пример уже для 6 точек: (0; 0), (0.5; 0.125), (1; 0.5), (1.5; 1.125), (2; 2), (3; 4.5).

Воспроизведение части функции Y=0.5⋅X2 отрезками, построенными по 6 точкам

Из рассмотренного примера можно сделать следующий вывод: связь между X и Y можно описать не только формулой, но и с помощью нескольких прямых линий, пусть иногда и упрощенно. В этом и заключается суть использования таблицы расчета.

 Математическая минутка

Таблица расчета использует точечную аппроксимацию и линейную интерполяцию.

Точечная аппроксимация — это нахождение функции, которая близка к исходной, на основе набора заранее известных значений. В Wialon она используется для приблизительного воспроизведения функции на основании пар XY.

Линейная интерполяция — это расчет значений на участках между изначально известными точками по прямым, которые проходят через эти точки. В Wialon она используется, для вычисления значений в точках, которые находятся между введенными ранее парами XY, по приблизительно воспроизведенной функции.

Обоснование и примеры использования

В данном разделе рассмотрим несколько случаев, в которых таблица расчета будет полезна.

Форма кривой, которая описывает связь между X и Y, может быть довольно сложной.

Например, при использовании датчика уровня топлива требуется произвести тарировку бака, а форма графика, построенного по тарировочной таблице, будет зависеть от геометрии бака, которая никогда не является идеальной (может иметь закругления, вмятины, внутренние ребра жесткости и так далее).

График, построенный по тарировочной таблице с малым шагом между замерами

Описать подобную зависимость одной формулой довольно проблематично. Более простой способ описать кривую для системы — это разбить ее на интервалы, где она ведет себя примерно как прямая линия, и определить формулы этих линий. Напомню, что получить подобный результат можно с помощью пар XY.

Воспроизведение формы сложной кривой отрезками, проходящими через 11 точек

Также иногда зависимость между X и Y может быть различной на нескольких интервалах. Для ее описания требуется использовать систему из нескольких выражений, что нельзя сделать в строке Параметр в свойствах датчика.

Например, некоторые датчики температуры работают следующим образом: значения X в диапазоне от 0 до 127 соответствуют положительной температуре, а в дипазоне от 128 до 255 — отрицательной. Для обработки подобного случая потребуется две строки в таблице расчета:

X=0; a=1; b=0
X=128; a=1; b=-256

График температуры, на котором более высокие значения параметра
соответствуют отрицательной температуре

Цифровые датчики являются еще одним ярким примером ситуации, когда зависимость между X и Y является различной на нескольких интервалах. Например, датчик зажигания можно создать на основе параметра напряжения, и для этого нужно учесть два условия: Y=0 при X<14, Y=1 при X≥14. Но, как мы уже знаем, сделать это с помощью выражения в свойствах датчика не получится. А на вкладке Таблица расчета для этого потребуется всего две строки:

X=0; a=0; b=0
X=14; a=0; b=1

В цифровых датчиках коэффициент наклона всегда равен 0.

График состояния зажигания в зависимости от напряжения

 Математическая минутка

В статье уже несколько раз упоминалось, что для датчика в идеале нужна формула связи X и Y, а таблицу расчета мы используем из-за отсутствия других вариантов. На самом деле, такую формулу можно попробовать рассчитать, однако для этого нужно иметь представление о численных методах анализа и соответствующее ПО. При этом результат скорее всего будет сложен для понимания и будет плохо поддаваться корректировке в будущем. Чтобы это продемонстрировать, мы рассчитали интерполяционный полином для следующих 7 точек: (0; 5), (400; 8), (1000; 22), (1850; 78), (2800; 160), (3600; 195), (4096; 200).

Результат полиномиальной интерполяции в данном случае имеет следующий вид:

Y=1.78962834270398⋅10-19⋅X6-7.99064624017665⋅10-16⋅X5-4.83816855045549⋅10-12⋅X4+
+2.62803612257704⋅10
-8⋅X3-1.24091655860425⋅10-5⋅X2+8.58707470047479⋅10-3⋅X+5

Эту формулу можно ввести в строку Параметр в свойствах датчика (с учетом синтаксиса Wialon), и она действительно будет рабочей. График такой функции в диапазоне от 0 до 4096 имеет следующий вид:

Однако если описываемая зависимость будет иметь более сложный вид, чем изображено на графике выше, то придется взять больше точек или даже использовать другой метод интерполяции, что может привести к тому, что результат станет еще более сложным для восприятия. Поэтому линейная интерполяция, которая используется в таблице расчета в Wialon, на этом фоне выглядит очень выигрышно, так как она достаточно точная и простая.

Олег Жарковский,Инженер Customer Service

Датчики: логика и альтернативы валидации
  • technical_consulting
  • sensors
  • validation

Одним из первых и главных этапов работы с Wialon является настройка датчиков в объекте. В данной статье будет детально рассмотрена валидация датчиков, так как она имеет неочевидные варианты использования и позволяет выполнять уникальные действия с датчиками.

Общий принцип работы датчиков

Wialon поддерживает множество типов трекеров (актуальное количество можно найти на сайте wialon.com в разделе Оборудование), и каждый из них «говорит» на своем «языке». Поэтому параметры, которые приходят от разных трекеров и отображаются на вкладке Сообщения, могут содержать одну и ту же информацию (например, о температуре или пробеге), но при этом иметь разные имена. Чтобы пользователь не замечал различий при использовании объектов с разными типами трекеров, для каждого объекта в Wialon необходимо создать датчики. Датчики имеют определенный тип, что позволяет системе понимать, какой алгоритм необходимо использовать для обработки приходящих параметров.

Однако зачастую просто выбрать тип датчика и указать в нем параметр оказывается недостаточно. Для преобразования значения параметра в нужный вид существуют 3 метода:

  1. Выражение в строке Параметр;
  2. Таблица расчета;
  3. Валидация.

Их можно использовать по отдельности или комбинировать. Если использовать несколько методов одновременно, то они будут применяться именно в том порядке, в котором они перечислены выше.

В некоторых случаях добиться одного и того же результата можно разными методами. Например, сложить значения двух датчиков можно и с помощью выражения в строке Параметр, и с помощью валидации. Далее подобные случаи будут рассмотрены дополнительно.

Когда используется валидация

Валидация используется в тех случаях, когда необходимо связать значение одного датчика с другим. С точки зрения практического применения можно выделить следующие случаи для использования валидации:

  • один датчик влияет на другой на физическом уровне (например, датчик уровня топлива показывает неправильное значение при скачке показаний датчика напряжения);

  • необходимо связать несколько датчиков в логическую схему (например, необходимо создать датчик открытия передних дверей автомобиля, который будет включен, когда включен либо датчик открытия левой двери, либо датчик открытия правой двери);

  • необходимо отобразить отчет за интервал времени, в начале которого использовался старый датчик с одним параметром, а в конце — новый датчик с другим параметром (например, ранее на грузовике использовался менее точный ДУТ с одной тарировочной таблицей, а потом его заменили на более точный ДУТ с другой тарировочной таблицей);

  • имеется несколько датчиков, измеряющих один и тот же показатель, и необходимо показывать значение одного или другого датчика (например, на машине имелся менее точный встроенный ДУТ, в дополнение к нему установили более точный ДУТ, и обычно используются показания второго, но если в них возникает ошибка, то лучше показать значение первого датчика, пусть они и менее точные);

  • параметр содержит информацию о разных системах объекта, и из него необходимо извлечь только определенную часть (например, первые 5 битов параметра сообщают о напряжении, а последующие имеют другое назначение, и из параметра нужно извлечь только те биты, которые связаны с напряжением);

  • необходимо провести какие-то арифметические вычисления, которые включают значения нескольких датчиков (например, требуется в реальном времени видеть расход топлива км/л, который вычисляется делением показания относительного одометра на показания датчика мгновенного расхода топлива).

Типы валидации

В Wialon существует 12 типов валидации. Вы не увидите такого разделения в интерфейсе мониторинга, но для упрощения все типы можно условно разделить на 3 группы.

ГруппаТипы валидацииКомментарийАльтернативы
Арифметическая
  • Суммировать
  • Вычесть валидатор из датчика
  • Вычесть датчик из валидатора
  • Перемножить
  • Делить датчик на валидатор
  • Делить валидатор на датчик
Без этих типов можно легко обойтись.Имеются, и они простые.
Алгоритмическая
  • Проверка на неравенство нулю
  • Заменять датчик валидатором в случае ошибки
Оба типа используются часто.Для второго типа имеется простая альтернатива.
Логическая
  • Логическое И
  • Логическое ИЛИ
  • Математическое И
  • Математическое ИЛИ
Наименее понятные типы, из которых в основном используются только первые два.Имеются, но они непростые.
Рассмотрим каждую из групп более подробно.

Арифметическая валидация

Данная группа включает в себя простые арифметические операции: сложение, вычитание, умножение и деление.

Без этих типов валидации можно легко обойтись, так как достичь аналогичного результата можно с помощью выражения в строке Параметр. Чтобы обратиться к значению другого датчика в выражении, нужно указать имя этого датчика в квадратных скобках (например, [Уровень топлива]).

В следующем примере рассмотрена небольшая разница между этими подходами.

 Пример

Предположим, что от объекта приходят сообщения, в которых присутствуют следующие параметры:

  • odometer — отображает расстояние в километрах, пройденное между двумя последними сообщениями;
  • fuel_consumption — отображает топливо в литрах, потраченное между двумя последними сообщениями.

Клиенту нужен датчик, который будет в реальном времени показывать расход в км/л.

Вариант решения через валидацию:

  1. Создать Датчик мгновенного расхода топлива с именем ДМРТ, основанный на параметре fuel_consumption.
  2. Создать Произвольный датчик с именем Расход и единицами измерения км/л. В качестве параметра указать odometer. В свойствах датчика Расход указать датчик ДМРТ в качестве валидатора и выбрать тип валидации Делить датчик на валидатор.

Вариант решения через выражение:

  1. Создать датчик с типом Относительный одометр с именем Относительный пробег, основанный на параметре odometer.
  2. Создать Датчик мгновенного расхода топлива с именем ДМРТ, основанный на параметре fuel_consumption.
  3. Создать Произвольный датчик с именем Расход и единицами измерения км/л. Использовать формулу с именами созданных ранее датчиков в квадратных скобках: [Относительный пробег]/[ДМРТ].

Как несложно заметить, при использовании валидации достаточно создать не 3, а только 2 датчика, но в таком случае ни один датчик не будет показывать значение пробега между сообщениями. Однако если для решения каких-то других задач вам потребуется создать датчик с типом Относительный одометр, то в таком случае решение с использованием выражения будет более удобным.

Алгоритмическая валидация

Данная группа включает в себя всего 2 типа валидации, каждый из которых заслуживает рассмотрения.

Проверка на неравенство нулю

Этот тип валидации является одним из самых используемых. Он позволяет игнорировать ошибочные показания валидируемого датчика, факт наличия которых определяется по нулевому значению датчика-валидатора.

Наиболее частой ситуацией применения является следующая: подключенный к трекеру датчик может показывать неправильные данные при недостаточном напряжении.

 Пример

Предположим, что в объекте созданы следующие датчики:

  • Датчик уровня топлива с именем ДУТ, основанный на параметре fuel_lvl;
  • Датчик напряжения с именем Напряжение, основанный на параметре pwr_ext.

Когда значение датчика напряжения падает ниже 9 вольт, аналоговый датчик уровня топлива показывает ошибочные значения. Для корректного контроля топлива необходимо избавиться от ложных показаний.

В таком случае необходимо:

  1. Создать Произвольный цифровой датчик с именем Достаточное напряжение на основе выражения [Напряжение].
  2. Добавить к нему таблицу расчета со следующими строками:
    X=0; a=0; b=0
    X=9; a=0; b=1
  3. В свойствах ДУТ указать датчик Достаточное напряжение в качестве валидатора и выбрать тип валидации Проверка на неравенство нулю.

Теперь при напряжении ниже 9 вольт датчик Достаточное напряжение будет иметь значение 0 (Выкл), следовательно, проверка на неравенство нулю не будет пройдена, из-за чего показания ДУТ будут заменены на прочерк (N/A). Это позволит исключить ошибочные данные из анализа.

Использование валидации Проверка на неравенство нулю возможно не только в тех ситуациях, когда датчики связаны друг с другом на физическом уровне (в примере выше на работу датчика влияет недостаточное напряжение), но и в случаях, когда между значениями датчиков наблюдается корреляция. Например, если вы замечаете, что по какой-то причине ДУТ показывает ложные значения, когда датчик температуры показывает значение 255, то этого достаточно, чтобы использовать такой тип валидации.

Заменять датчик валидатором в случае ошибки

Этот тип валидации также является достаточно популярным. Логика его работы проста: если валидируемый датчик имеет ошибочное значение, то оно заменяется на значение датчика-валидатора.

Это единственный тип валидации, который может реагировать на ошибочные значения датчика, которые отображаются как прочерк или N/A. Все остальные типы валидации при наличии ошибки на входе будут отображать ошибку и на выходе.

Данный тип подходит для ситуаций, в которых нужно отобразить значение двух датчиков таким образом, будто это один датчик. Обычно причин для этого может быть две: либо старый датчик заменили на новый, а отчеты должны содержать информацию и за интервал работы старого, и за интервал работы нового датчика, либо на объекте одновременно имеется два датчика, но один из них периодически отображает ошибку, и в этот момент нужно показывать значение другого датчика. Рассмотрим оба случая на примерах.

 Пример 1

Предположим, что в рамках интервала отчета от объекта приходили сообщения, в которых присутствовали следующие параметры:

  • adc1 — отображает уровень топлива в вольтах по ранее установленному датчику уровня топлива (в новых сообщениях параметр отсутствует);
  • param4 — отображает уровень топлива в вольтах по новому датчику уровня топлива (в старых сообщениях параметр отсутствует).

Необходимо настроить датчики так, чтобы в отчете можно было отобразить данные о топливе и по старому, и по новому датчику.

В таком случае необходимо:

  1. Создать Датчик уровня топлива с именем ДУТ (старый), основанный на параметре adc1. В его таблицу расчета необходимо внести старую тарировочную таблицу для конвертации вольт в литры.

  2. Создать Датчик уровня топлива с именем ДУТ, основанный на параметре param4. В его таблицу расчета необходимо внести новую тарировочную таблицу для конвертации вольт в литры. В свойствах ДУТ в качестве валидатора указать датчик ДУТ (старый) и выбрать тип валидации Заменять датчик валидатором в случае ошибки.

Решить эту задачу можно с помощью выражения в строке Параметр, а именно с помощью операции Проверка наличия значения. Для этого необходимо:

  1. Создать Датчик уровня топлива с именем ДУТ (старый), основанный на параметре adc1. В его таблицу расчета необходимо внести старую тарировочную таблицу для конвертации вольт в литры.
  2. Создать Датчик уровня топлива с именем ДУТ, основанный на параметре param4|[ДУТ (старый)]. В его таблицу расчета необходимо внести новую тарировочную таблицу для конвертации вольт в литры.
 Пример 2

Предположим, что от объекта приходят сообщения, в которых присутствуют следующие параметры:

  • fls_rs485 — отображает уровень топлива в вольтах по установленному датчику уровня топлива;
  • fuel_lvl — отображает уровень топлива в литрах по встроенному датчику уровню топлива.

Установленный ДУТ является более точным, но иногда он отображает ошибку, и в этот момент клиент хочет видеть показания встроенного ДУТа.

В таком случае необходимо:

  1. Создать Произвольный датчик с именем ДУТ встроенный, основанный на параметре fuel_lvl.
  2. Создать Датчик уровня топлива с именем ДУТ, основанный на параметре fls_rs485. В его таблицу расчета необходимо внести тарировочную таблицу для конвертации вольт в литры. В свойствах ДУТ в качестве валидатора указать датчик ДУТ встроенный и выбрать тип валидации Заменять датчик валидатором в случае ошибки.

Логическая валидация

Данная группа включает 4 типа валидации:

  • Логическое И и Логическое ИЛИ — работают с логическими значениями (в Wialon они называются цифровыми — это Вкл/Выкл или 1/0);
  • Математическое И и Математическое ИЛИ — работают отдельно с каждым битом чисел.

Рассмотрим эти варианты с примерами.

Логическое И/ИЛИ

Можно сказать, что операция Логическое И выдает значение 1 в качестве результата только в том случае, когда оба значения на входе равны 1, а Логическое ИЛИ — если хотя бы одно из значений на входе равно 1.

Если предположить, что два датчика связаны валидацией, и один из них основан на параметре a, а другой — на параметре b, то все возможные результаты можно описать одной таблицей:

Таблица истинности
aba И ba ИЛИ b

0

000
0101

1

001

1

111

Значение валидируемого датчика после выполнения логических операций И/ИЛИ всегда будет равно 0 или 1 (в данном случае не рассматривается ошибка, то есть прочерк или N/A).

На входе также ожидается только значения 0 или 1, однако в Wialon возможна ситуация, когда на вход валидации подаются другие числовые значения. В таком случае система будет работать следующим образом:

  • Только 0 воспринимается как 0 (Выкл).
  • Любое другое числовое значение (например, 0.01, -0.01, 100500, -777 и т. д.) будет восприниматься как 1 (Вкл).

В идеале стоит избегать подобных ситуаций и использовать таблицу расчета, чтобы превратить все входящие значения только в 0 или 1.

 Пример 1

Предположим, что от объекта приходят сообщения, в которых присутствуют следующие параметры:

  • in3 — равен 0, когда навесное оборудование выключено, или 1, когда оно включено;
  • in4 — равен 0, когда задняя дверь закрыта, или 1, когда она открыта.

Необходимо создать датчик, который будет включен, когда навесное оборудование включено и задняя дверь открыта.

В таком случае необходимо:

  1. Создать Произвольный цифровой датчик с именем Навесное оборудование, основанный на параметре in3.

  2. Создать Произвольный цифровой датчик с именем Задняя дверь открыта при рабочем оборудовании, основанный на параметре in4. Далее выбрать датчик Навесное оборудование в качестве валидатора и выбрать тип валидации Логическое И.

Решить эту задачу можно и с помощью выражения в строке Параметр. Для этого достаточно создать Произвольный цифровой датчик с именем Задняя дверь открыта при рабочем оборудовании, основанный на выражении in3*in4.

Данный подход будет работать, если параметры могут принимать только значения 0 или 1.

 Пример 2

Предположим, что от объекта приходят сообщения, в которых присутствуют следующие параметры:

  • door11 — равен 0, когда левая передняя дверь закрыта, или 1, когда эта дверь открыта;
  • door12 — равен 0, когда правая передняя дверь закрыта, или 1, когда эта дверь открыта.

Необходимо создать датчик, который будет включен, когда открыта хотя бы одна из передних дверей автомобиля.

В таком случае необходимо:

  1. Создать Произвольный цифровой датчик с именем Левая передняя дверь открыта, основанный на параметре door11.

  2. Создать Произвольный цифровой датчик с именем Открытие передних дверей, основанный на параметре door12. Далее указать датчик Левая передняя дверь открыта в качестве валидатора и выбрать тип валидации Логическое ИЛИ.

Решить эту задачу можно и с помощью выражения в строке Параметр и таблицы расчета:

  1. Создать Произвольный цифровой датчик с именем Открытие передних дверей, основанный на выражении door11+door12.
  2. Добавить к нему таблицу расчета со следующими строками:
    X=0; a=0; b=0
    X=1; a=0; b=1

Данный подход будет работать, если параметры могут принимать только значения 0 или 1.

Математическое И

Данная валидация бывает полезна для выделения определенной части битов из параметра. Она подразумевает побитовое выполнение операции Логическое И, что продемонстрировано ниже.

Сперва с помощью приложения Калькулятор в режиме программиста или аналогичных онлайн-инструментов необходимо перевести рассматриваемое число из десятичной (DEC) системы счисления в двоичную (BIN).

Например, результат математического И между числами 122 и 15 будет иметь следующий вид:


DECBIN
число 112201111010
число 21500001111
результат математического И1000001010

Если во втором числе бит равен 0 (выделено красным), то в результате этот бит также будет равен 0. А если во втором числе бит равен 1 (выделено зеленым), то в результате этот бит будет иметь то же значение, что и в первом числе. Можно сказать, что с помощью двоичного представления числа 15 была осуществлена фильтрация числа 122 таким образом, чтобы оставить в нем только младшие 4 бита.

 Пример 1

Предположим, что от объекта приходят сообщения, в которых присутствует 16-битный параметр can_a1, который содержит в себе информацию о разных системах объекта. Исходя из документации трекера в младших 8 битах параметра содержится информация об уровне топлива. Необходимо проверить это и извлечь часть параметра из 8 младших битов, чтобы создать на их основе датчик уровня топлива.

Например, когда 100-литровый бак заполнен на 40%, значение параметра can_a1 может иметь следующие значения:

DECBIN
169980100001001100110
267260110100001100110
408061001111101100110
390141001100001100110

Как несложно заметить, значение параметра can_a1 может меняться в десятичном представлении, но при этом младшие 8 битов параметра остаются неизменными (они выделены синим), так как количество топлива в баке не меняется. Если перевести значения младших 8 битов в десятичную систему, то получаем:

(BIN) 0110 0110 = (DEC) 102

А максимально значение, которое можно хранить в 8 битах равно:

(BIN) 1111 1111 = (DEC) 255

С помощью простых арифметических действий проверяем, что 102/255 = 40/100 = 0.4 — из этого можно сделать вывод, что младшие 8 битов параметра действительно соответствуют баку, заполненному на 40%.

Для извлечения первой части параметра необходимо:

  1. Создать Произвольный датчик с именем Младшие 8 битов на основе параметра const255.
  2. Создать Датчик уровня топлива с именем ДУТ на основе параметра can_a1. Далее выбрать датчик Младшие 8 битов в качестве валидатора и выбрать тип валидации Математическое И. Также в таблицу расчета датчика необходимо внести тарировочную таблицу для конвертации результата в литры.

Так как в разных сообщениях каждый бит может иметь разные значения, то обозначим младшие биты как b, а старшие — B:


DECBIN
can_a1
BBBBBBBBbbbbbbbb
число 22550000000011111111
результат математического И
00000000bbbbbbbb

В итоге с помощью двоичного представления числа 255 была осуществлена фильтрация параметра can_a1 таким образом, чтобы оставить в нем только младшие 8 битов.

Решить эту задачу можно с помощью выражения в строке Параметр.

Для этого необходимо создать Датчик уровня топлива с именем ДУТ, основанный на следующем выражении:

const128*can_a1:8+const64*can_a1:7+const32*can_a1:6+const16*can_a1:5+const8*can_a1:4+
const4*can_a1:3+const2*can_a1:2+const1*can_a1:1

Подробнее о таком решении можно узнать в статье о работе с битами.

 Пример 2

Предположим, что от объекта приходят сообщения, в которых присутствует 16-битный параметр can_b2, который содержит в себе информацию о разных системах объекта. Исходя из документации трекера в старших 8 битах параметра содержится информация об уровне топлива. Необходимо проверить это и извлечь часть параметра из 8 старших битов, чтобы создать на их основе датчик уровня топлива.

Например, когда 200-литровый бак заполнен на 60%, значение параметра can_b2 может иметь следующие значения:

DECBIN
392821001100101110010
392621001100101011110
393621001100111000010
392861001100101110110

Как несложно заметить, значение параметра can_b2 может меняться в десятичном представлении, но при этом старшие 8 битов параметра остаются неизменными (они выделены синим), так как количество топлива в баке не меняется. Если перевести значения старших 8 битов в десятичную систему, то получаем:

(BIN) 1001 1001 = (DEC) 153

А максимально значение, которое можно хранить в 8 битах равно:

(BIN) 1111 1111 = (DEC) 255

С помощью простых арифметических действий проверяем, что 153/255 = 120/200 = 0.6 — из этого можно сделать вывод, что старшие 8 битов параметра действительно соответствуют баку, заполненному на 60%.

Для извлечения второй части параметра необходимо:

  1. Создать Произвольный датчик с именем Старшие 8 битов на основе параметра const65280.
  2. Создать Произвольный датчик с именем Отфильтрованные биты на основе параметра can_b2. Далее выбрать датчик Старшие 8 битов в качестве валидатора и выбрать тип валидации Математическое И.

  3. Создать Датчик уровня топлива с именем ДУТ на основе выражения [Отфильтрованные биты]/const256. В его таблицу расчета необходимо внести тарировочную таблицу для конвертации результата в литры.

Так как в разных сообщениях каждый бит может иметь разные значения, то обозначим младшие биты как b, а старшие — B:


DECBIN
can_b2
BBBBBBBBbbbbbbbb
число 2652801111111100000000
результат математического И
BBBBBBBB00000000
результат после деления на 256
00000000BBBBBBBB

Смещение битов на несколько разрядов вниз происходит через деление на 2 в степени, которая равная количеству разрядов для смещения. В данном случае это смещение на 8 разрядов, поэтому деление осуществляется на 28 = 256.

В итоге с помощью двоичного представления числа 65280 была осуществлена фильтрация параметра can_b2 таким образом, чтобы оставить в нем только старшие 8 битов, а потом они были превращены в младшие биты с помощью смещения.

Решить эту задачу можно с помощью выражения в строке Параметр.

Для этого необходимо создать Датчик уровня топлива с именем ДУТ, основанный на следующем выражении:

const128*can_b2:16+const64*can_b2:15+const32*can_b2:14+const16*can_b2:13+const8*can_b2:12+
const4*can_b2:11+const2*can_b2:10+const1*can_b2:9

Подробнее о таком решении можно узнать в статье о работе с битами.

Математическое ИЛИ

Данная валидация подразумевает побитовое выполнение операции Логическое ИЛИ, что продемонстрировано ниже.

Сперва с помощью приложения Калькулятор в режиме программиста или аналогичных онлайн-инструментов необходимо перевести рассматриваемое число из десятичной (DEC) системы счисления в двоичную (BIN).

Например, результат математического ИЛИ между числами 122 и 210 будет иметь следующий вид:


DECBIN
число 112201111010
число 221011010010
результат математического ИЛИ25011111010

Если хотя бы один из битов в первых двух числах равен 1, то в результате этот бит будет равен 1 (выделено зеленым). А если оба бита в первых двух числах равны 0, то в результате этот бит будет равен 0 (выделено красным).

Олег Жарковский,Инженер Customer Service

Датчики: работа с битами
  • technical_consulting
  • sensor_parameters

В большинстве случаев приходящие от трекеров параметры имеют фиксированный формат и описывают определенное состояние объекта, а потому их можно однозначно интерпретировать со стороны Wialon и отобразить в сообщениях. Однако некоторые трекеры в один параметр могут записывать разную по содержанию информацию или даже несколько блоков информации. В таком случае для ее корректного отображения в Wialon потребуется специальным образом настроить датчик. Для этого необходимо использовать побитовый контроль, о котором и пойдет речь в данной статье.

Проблематика

Существуют трекеры, которые позволяют передавать пользовательские параметры, содержание которых может отличаться в зависимости от конфигурации устройства.

Например, в Wialon может отображаться параметр user_value = 2646793773, хотя со стороны трекера подразумевалась передача одного из следующих значений:

  • 2646793773 — целое число без знака;
  • 56877 и 40386 — несколько целых чисел;
  • −499310125 — целое число со знаковым разрядом;
  • −5.15811×1021 или 0.00000000000000000000515811 — число с плавающей запятой и т. д.

Теоретически данную проблему можно решить со стороны Wialon через изменение скрипта, который разбирает приходящие от трекера данные. Однако это повлияет на всех пользователей, а у них могут быть разные конфигурации трекеров, то есть они могут ожидать разного результата разбора данных со стороны скрипта. К счастью, существует метод решения проблемы, который подойдет для всех, — создание датчика с нужной формулой. При этом основана она будет на представлении параметра в двоичной системе счисления, так как мы уже знаем, что представление в десятичной системе счисления может быть разным. В двоичном виде значение параметра из примера выше записывается следующим образом: 1001 1101 1100 0010 1101 1110 0010 1101. Теперь давайте разберемся, как работать с двоичной системой счисления.

Теоретическая основа

В данном разделе будет рассмотрена информация, необходимая для применения дальнейших формул.

Системы счисления

В математике используются разные системы счисления. Наиболее привычными для понимания являются позиционные системы счисления, в которых значение каждого знака зависит от его позиции (разряда). Например, в рамках десятичной системы цифра 1, в зависимости от позиции в числе, может означать одну единицу (1), один десяток (10), одну сотню (100) и так далее.

Количество знаков, используемых в позиционных системах счисления, называется основанием.

В таблице ниже приведены несколько распространенных систем счисления:

Название

ОбозначениеОснованиеОбласть примененияИспользуемые знаки

Двоичная (binary)

BIN2Дискретная математика, информатика, программирование0, 1

Десятичная (decimal)

DEC10Повсеместно

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Шестнадцатеричная (hexadecimal)

HEX16Информатика, программирование0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Для быстрого перевода чисел из одной системы счисления в другую можно использовать приложение Калькулятор (оно предустановлено на каждом компьютере, либо его аналоги можно найти в интернете) в режиме Программист (или аналогичном).

Числа в Wialon отображаются в десятичной системе счисления. Исключением являются текстовые параметры, в которых может быть записано число (например, шестнадцатеричный код водителя), а также отображение цифровых входов и выходов в формате I/O.

Можно придумать и использовать любую систему счисления, например, тринадцатеричную, но она не является общепринятой, что может привести к трудностям при разборе данных на принимающей стороне.

Использование разных систем счисления имеет не только исторические или культурные причины, но и практические основания. Непривычная людям двоичная система значительно упрощает математические расчеты для электронных устройств. Также двоичная система удобна с точки зрения простоты распознавания значений при наличии шумов, так как отличить отсутствие напряжения от его наличия проще, чем определить конкретный уровень напряжения от 0 до 9.

Биты и байты

Двоичная система счисления и двоичный код являются разными терминами. Первый относится к математике (теории), а второй — в основном к цифровой технике (практическому применению). Но во многом эти термины пересекаются, поэтому далее в статье мы будем перескакивать между ними, что не должно повлиять на понимание темы на нужном нам уровне погружения.

Бит — это один разряд двоичного кода.

Байт — это совокупность 8 бит.

Полубайт — это группа из 4 бит, которая соответствуют одному символу в шестнадцатеричной системе счисления.

Для удобства восприятия двоичные числа часто разделяют пробелами на полубайты. То есть вместо записи 10011101110000101101111000101101 будет использоваться запись 1001 1101 1100 0010 1101 1110 0010 1101.

Нумерация битов в Wialon начинается с 1. Обычно нумерация битов начинается с 0, поэтому формулы, которые вы увидите ниже, могут немного отличаться от найденных в интернете или других источниках.

Числа с плавающей запятой

Число с плавающей запятой (или точкой) — это экспоненциальная форма представления действительных чисел, в которой число хранится в виде мантиссы и порядка.

Ниже приведено несколько примеров таких чисел:

125 000 = 1.25 × 105 — здесь мантисса равна 1.25, а порядок равен 5.

0.000000125 = 1.25 × 10−7 — мантисса равна 1.25, а порядок равен −7.

125 000 000 000 000 = 1.25 × 1014 — мантисса равна 1.25, а порядок равен 14.

Преимущество использования подобной записи заключается в возможности значительно расширить диапазон передаваемых значений при сохранении количества задействованных битов.

Для представления чисел с плавающей запятой в цифровых устройствах наиболее часто используется стандарт IEEE 754.

Практическое применение

В данном разделе будут рассмотрены разные варианты пользовательских параметров и формулы для их интерпретации в Wialon.

Примеры их использования можно найти в инструкции.

Преобразование двоичного числа в целое десятичное

Для понимания формулы преобразования стоит сперва взглянуть на десятичные числа под немного непривычным углом. Рассматривать будем десятичное число 125. Оно состоит из 1 сотни, 2 десятков и 5 единиц: 125 = 1 × 100 + 2 × 10 + 5 × 1.

Как мы уже знаем, основанием десятичной системы является число 10. Также зафиксируем, что сотни находятся в третьем разряде, десятки — во втором, единицы — в первом. С учетом этого число можно представить, как сумму значений из каждого разряда, умноженных на основание системы счисления в степени, равной номеру разряда минус один:

125 = 1 × 103−1 + 2 × 102−1 + 5 × 101−1 = 1 × 1022 × 101 + 5 × 100

Для вычисления целого десятичного числа из двоичного используется такая же формула, но основанием уже будет число 2: сумма битов, умноженных на основание системы счисления в степени, равной номеру бита минус один.

,

где d — число в десятичной системе счисления, i — номер бита двоичного числа, N — количество битов, bi — значение i-го бита.

Также эту формулу можно представить в следующем виде:

d = bN × 2N−1 + ... + bi × 2i−1 + ... + b2 × 22−1 + b1 × 21−1

Рассмотрим пример с тем же числом:

(BIN) 0111 1101 = (DEC) 0 × 28−1 + 1 × 27−1 + 1 × 26−1 + 1 × 25−1 + 1 × 24−1 + 1 × 23−1 + 0 × 22−1 + 1 × 21−1 =

= (DEC) 0 × 27 + 1 × 26 + 1 × 25 + 1 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = (DEC) 26 + 25 + 24 + 23 + 22 + 20 =

= (DEC) 64 + 32 + 16 + 8 + 4 + 1 = (DEC) 125.

Эта формула является ключевой для работы с битами в Wialon. На ее основе выполняются все остальные преобразования.

Если значение приходит в параметре с именем user_value, то с учетом синтаксиса Wialon формула примет следующий вид:

user_value:8*const2^const7+user_value:7*const2^const6+user_value:6*const2^const5+user_value:5*const2^const4+user_value:4*const2^const3+user_value:3*const2^const2+user_value:2*const2^const1+user_value:1*const2^const0

Такой формат записи формулы кажется более длинным, однако он позволяет легко отследить нумерацию битов и степеней, что позволяет не ошибится при записи формулы. Но если вы хорошо знаете степени двойки, то вам может подойти упрощенный вариант данной формулы:

user_value:8*const128+user_value:7*const64+user_value:6*const32+user_value:5*const16+user_value:4*const8+user_value:3*const4+user_value:2*const2+user_value:1*const1

Длина формулы преобразования будет зависеть от количества учитываемых битов, поэтому копировать ее напрямую из статьи не получится. Если по протоколу трекера на значение параметра выделен 1 байт (8 битов), то формула будет аналогична приведенной выше (необходимо будет лишь заменить в ней имя параметра). А если на параметр выделено 3 байта, то формула будет в 3 раза длиннее, и в ней будут использоваться константы вплоть до 223 = 8388608.

Выделение части параметра

Как было отмечено ранее, иногда в одном параметре может содержаться сразу несколько разных значений. В таком случае необходимо использовать формулу, приведенную в предыдущем разделе, однако учитывать только некоторые биты.

В качестве примера рассмотрим параметр user_value со значением (DEC) 32200 = (BIN) 0111 1101 1100 1000. Его первый байт описывает значение первого счетчика, а второй байт — значение другого счетчика. Необходимо создать два отдельных датчика с формулами, которые будут использовать только нужные байты.

Параметрuser_value
Номер бита исходного значения16151413121110987654321
Значение бита0111110111001000
Номер бита искомого значения8765432187654321
ДатчикСчетчик №2Счетчик №1

Формула для первого датчика будет аналогична формуле из предыдущего раздела, так как номера битов исходного и искомого значения совпадают:

user_value:8*const2^const7+user_value:7*const2^const6+user_value:6*const2^const5+user_value:5*const2^const4+user_value:4*const2^const3+user_value:3*const2^const2+user_value:2*const2^const1+user_value:1*const2^const0

Формула для второго датчика будет отличаться, так как мы будем обращаться к битам 9-16, но воспринимать их как биты 1-8:

user_value:16*const2^const7+user_value:15*const2^const6+user_value:14*const2^const5+user_value:13*const2^const4+user_value:12*const2^const3+user_value:11*const2^const2+user_value:10*const2^const1+user_value:9*const2^const0

В итоге из одного числа 32200 мы сможем получить:

(BIN) 1100 1000 = (DEC) 200 — значение первого счетчика.

(BIN) 0111 1101 = (DEC) 125 — значение второго счетчика.

Учет знака числа

В некоторых случаях значение старшего бита может быть не значащим, а знаковым, то есть содержать информацию не о величине значения, а о том, положительное ли это число или отрицательное.

Например, если в пользовательском параметре трекер отправляет значение 13 или −5, то Wialon об этом не знает, и в обоих случаях мы увидим одинаковый параметр user_value = 13, так как:

(DEC) 13 = (BIN) 1101

(DEC) −5 = (BIN) 1101 — старший бит отвечает за минус, а (BIN) 101 = (DEC) 5.

Чтобы интерпретировать знаковый бит правильно, необходимо изменить формулу преобразование двоичного числа в целое десятичное, добавив к ней в начале −1 в степени старшего бита:

,

где d — число в десятичной системе счисления, i — номер бита двоичного числа, N — количество битов, bi — значение i-го бита.

Также эту формулу можно представить в следующем виде:

d = (−1)bN × (bN-1 × 2(N−1)−1 + ... + bi × 2i−1 + ... + b2 × 22−1 + b1 × 21−1)

Данная формула работает, так как (−1)0 = 1, а (−1)1 = −1, что и позволяет отобразить знак числа с помощью одного бита.

Если предположить, что знаковым битом является бит номер 32, то для его учета в Wialon нужно дописать в датчике в начало выражения следующую формулу:

(const-1)^user_value:32*...

Подобный подход используется в стандарте IEEE 754. Однако производители оборудования могут использовать и другие подходы для учета знака числа (например, вычетание смещения или дополнительный код), поэтому описанный выше подход может подойти не для всех типов трекеров и датчиков.


Преобразование двоичного числа в десятичное число с плавающей запятой

Речь идет про преобразование двоичного нормализованного числа в 32-битный формат по стандарту IEEE 754. Данный стандарт подразумевает не передачу самого числа с плавающей запятой, а передачу некоторых значений, по которым искомое число можно рассчитать по следующей формуле:

d = (−1)S × 2(E−127) × (1 + M/223),

где d — число в десятичной системе счисления, S — знак числа, E — смещенная экспонента, M — остаток нормализованной мантиссы.

Для применения этой формулы не требуется ее полное понимание, так как в стандарте описано, в каких битах хранятся S, E и M, которые нужно просто подставить в выражение.

 Дополнительная информация

В приведенной формуле используется не порядок числа с плавающей запятой, который может быть отрицательным (например, 1.25×10−7), а смещенная экспонента E, которая всегда имеет положительное значение. Обратное смещение достигается с помощью вычитания 127 из смещенной экспоненты уже в формуле, что и позволяет получить отрицательные значения.

Нормализованная двоичная мантисса лежит в диапазоне [1; 2), то есть ее первый бит всегда равен 1. Поэтому в стандарте IEEE 754 эту единицу не отправляют (ведь она известна заранее), а добавляют в формуле на этапе вычисления результата. Это позволяет сэкономить один бит и получить большую точность передаваемого значения. В приведенной формуле М является не мантиссой, а ее остатком.

В качестве примера рассмотрим число −5.15811×10−21, которое будет отображаться в параметре как user_value = 2646793773:

(DEC) 2646793773 = (BIN) 1001 1101 1100 0010 1101 1110 0010 1101

Знаковый бит (S)Смещенная экспонента (E)Остаток нормализованной мантиссы (M)
3231302928272625242322212019181716151413121110987654321
10011101110000101101111000101101

По формуле преобразования двоичного числа в целое десятичное получаем значения M и E.

Остаток нормализованной мантиссы M будет равен:

user_value:23*const2^const22+user_value:22*const2^const21+user_value:21*const2^const20+user_value:20*const2^const19+user_value:19*const2^const18+user_value:18*const2^const17+user_value:17*const2^const16+user_value:16*const2^const15+user_value:15*const2^const14+user_value:14*const2^const13+user_value:13*const2^const12+user_value:12*const2^const11+user_value:11*const2^const10+user_value:10*const2^const9+user_value:9*const2^const8+user_value:8*const2^const7+user_value:7*const2^const6+user_value:6*const2^const5+user_value:5*const2^const4+user_value:4*const2^const3+user_value:3*const2^const2+user_value:2*const2^const1+user_value:1*const2^const0

Смещенная экспонента E будет равна:

user_value:31*const2^const7+user_value:30*const2^const6+user_value:29*const2^const5+user_value:28*const2^const4+user_value:27*const2^const3+user_value:26*const2^const2+user_value:25*const2^const1+user_value:24*const2^const0

Теперь запишем конечную формулу с учетом синтаксиса Wialon:

(const-1^user_value:32)*const2^(user_value:31*const2^const7+user_value:30*const2^const6+
user_value:29*const2^const5+user_value:28*const2^const4+user_value:27*const2^const3+
user_value:26*const2^const2+user_value:25*const2^const1+user_value:24*const2^const0-const127)*(const1+
(user_value:23*const2^const22+user_value:22*const2^const21+user_value:21*const2^const20+
user_value:20*const2^const19+user_value:19*const2^const18+user_value:18*const2^const17+
user_value:17*const2^const16+user_value:16*const2^const15+user_value:15*const2^const14+
user_value:14*const2^const13+user_value:13*const2^const12+user_value:12*const2^const11+
user_value:11*const2^const10+user_value:10*const2^const9+user_value:9*const2^const8+
user_value:8*const2^const7+user_value:7*const2^const6+user_value:6*const2^const5+
user_value:5*const2^const4+user_value:4*const2^const3+user_value:3*const2^const2+
user_value:2*const2^const1+user_value:1*const2^const0)/const2^const23)

Или упрощенно:

(const-1^user_value:32)*const2^(user_value:31*const128+user_value:30*const64+user_value:29*const32+
user_value:28*const16+user_value:27*const8+user_value:26*const4+user_value:25*const2+
user_value:24*const1-const127)*(const1+(user_value:23*const4194304+user_value:22*const2097152+
user_value:21*const1048576+user_value:20*const524288+user_value:19*const262144+
user_value:18*const131072+user_value:17*const65536+user_value:16*const32768+user_value:15*const16384+
user_value:14*const8192+user_value:13*const4096+user_value:12*const2048+user_value:11*const1024+
user_value:10*const512+user_value:9*const256+user_value:8*const128+user_value:7*const64+
user_value:6*const32+user_value:5*const16+user_value:4*const8+user_value:3*const4+user_value:2*const2+
user_value:1*const1)/const8388608)

При подстановке числовых значений получаем:

(−1)1 × 2(59−127) × (1 + 4382253/223) = −0.00000000000000000000515811 = −5.15811×10−21

Как видим, полученный результат значительно отличается от исходного значения параметра 2646793773.

Формула преобразования двоичного нормализованного числа в 32-битный формат IEEE 754 является единой для всех трекеров, так как речь идет про конкретный стандарт. Если в документации к трекеру вы видите, что пользовательский параметр может отправляться по стандарту IEEE 754, и вы выбираете этот формат отправки, то для интерпретации в Wialon вы можете копировать выражение для датчика напрямую из этой статьи, заменив в нем лишь имя параметра user_value, но не изменяя номера битов.

Из следующего блока вы можете удобно скопировать формулу для преобразование двоичного числа в десятичное число с плавающей запятой (32-битный формат по стандарту IEEE 754):

(const-1^user_value:32)*const2^(user_value:31*const128+user_value:30*const64+user_value:29*const32+user_value:28*const16+user_value:27*const8+user_value:26*const4+user_value:25*const2+user_value:24*const1-const127)*(const1+(user_value:23*const4194304+user_value:22*const2097152+user_value:21*const1048576+user_value:20*const524288+user_value:19*const262144+user_value:18*const131072+user_value:17*const65536+user_value:16*const32768+user_value:15*const16384+user_value:14*const8192+user_value:13*const4096+user_value:12*const2048+user_value:11*const1024+user_value:10*const512+user_value:9*const256+user_value:8*const128+user_value:7*const64+user_value:6*const32+user_value:5*const16+user_value:4*const8+user_value:3*const4+user_value:2*const2+user_value:1*const1)/const8388608)

Олег Жарковский,Инженер Customer Service

Некорректный пробег
  • technical_consulting
  • trips

Некорректный пробег может влиять на расчет средней скорости, средний расход топлива на километр, интервалы техобслуживания и, конечно же, на показатель пройденного расстояния. Поэтому очень важно отслеживать и устранять возникшие проблемы как на стороне оборудования, так и на стороне ПО.

Если вы столкнулись с проблемой некорректного определения пробега в отчете, на треке или в сообщениях, то в первую очередь проверьте, какой тип счетчика пробега выбран у вас на вкладке Основное в свойствах объекта:

  • GPS
  • GPS + датчик зажигания
  • Датчик пробега
  • Относительный одометр

Узнав, какой счетчик используется в вашем объекте, выберите соответствующий раздел статьи.

1. GPS

На корректность пробега при использованнии данного типа счетчика может влиять неустойчивая связь со спутниками, сбои в передаче данных, а также использование дополнительных датчиков. Рассмотрим эти варианты подробнее.

a. Выбросы координат и неправильная хронология сообщений

Выбросы координат могут появляться из-за плохой связи со спутниками Глобальной Навигационной Спутниковой Системы (ГНСС). Чтобы определить, что выбросы имели место, перейдите на вкладку Сообщения и выгрузите данные для нужного объекта за проблемный период. На карте вы увидите трек, по которому можно будет определить наличие выбросов: координаты сообщений значительно отстоят от фактического местоположения объекта.


В данном примере явным признаком проблем с определение местоположения объекта является параметр HDOP — он имеет значения >1

Wialon имеет ограничение: не более 1 сообщения должно приходить от объекта за 1 секунду. Если терминал передает более 1 сообщения в 1 секунду, хронология сообщений может нарушиться и трек будет выглядеть аналогичным образом. Причина — некорректная расстановка сообщений с позиционными данными (координатами) в базе данных Wialon. В таких случаях, в настройках терминала следует снизить частоту отправки сообщений с данными.

Возможные варианты решения:

  • Использовать Фильтрацию валидности сообщений;
  • Изменить настройки Детектора поездок.

В примере выше при помощи датчика зажигания в детекторе поездок, удалось избавиться от выбросов, т. к. они фиксируются на интервале без включенного зажигания:



b. Использование датчика пробега

В некоторых случаях счетчик (вкладка Основное в свойствах объекта) работает на основе GPS-координат, но при этом также создан отдельный датчик пробега (вкладка Датчики в свойствах объекта). В отчетах, например, с таблицей Поездки колонка Пробег будет выводить значение по GPS (суммарное расстояние между координатами), но значение колонок Начальный/Конечный пробег будет рассчитано следующими методами:

  • Если значение датчика пробега имеется в первом/последнем сообщении интервала, то система использует эти значения.
 Пояснения

Условимся, что фактически объект проехал 2 км, а сообщения приходили в следующем порядке:

  1. 10 км
  2. -- км
  3. -- км
  4. 15 км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Начальный пробег получим 10 км (как в сообщении), в колонке Конечный пробег получим 15 км (как в сообщении).

Аналогичный пример, но значение датчика пробега доступно только в последнем сообщении:

  1. -- км
  2. -- км
  3. -- км
  4. 15 км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Конечный пробег получим 15 км (как в сообщении).

И еще один пример, где значение датчика пробега доступно только в первом сообщении:

  1. 10 км
  2. -- км
  3. -- км
  4. -- км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Начальный пробег получим 10 км (как в сообщении).

  • Если в первом сообщении интервала нет значения датчика пробега, то система ищет первое доступное сообщение со значением датчика пробега на этом интервале, а потом из него вычитается пробег до начала поездки, рассчитанный по GPS-координатам.
 Пояснения

Условимся, что фактически объект проехал 2 км, а сообщения приходили в следующем порядке:

  1. -- км
  2. -- км
  3. -- км
  4. 15 км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Начальный пробег получим 15 км - рассчитанное по GPS-координатам значение или 15 км - 2 км = 13 км, в колонке Конечный пробег получим 15 км (как в сообщении).

  • Если в последнем сообщении интервала нет значения датчика пробега, то система ищет последнее доступное сообщение со значением пробега на этом интервале, а потом к нему прибавляется пробег до конца поездки, рассчитанный по GPS-координатам.
 Пояснения

Условимся, что фактически объект проехал 2 км, а сообщения приходили в следующем порядке:

  1. 10 км
  2. -- км
  3. -- км
  4. -- км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Начальный пробег получим 10 км (как в сообщении), в колонке Конечный пробег получим 10 км + рассчитанное по GPS-координатам значение или 10 км + 2 км = 12 км.

  • Если в первом и последнем сообщении нет значения датчика пробега, то система ищет первое доступное значение датчика, а потом из него вычитает пробег рассчитанный по GPS-координатам, чтобы получить начальное значение, а, чтобы получить конечное значение, наоборот, прибавляет к значению датчика пробег, рассчитанный по GPS-координатам.
 Пояснения

Условимся, что фактически объект проехал 2 км, а сообщения приходили в следующем порядке:

  1. -- км
  2. 10 км
  3. 15 км
  4. -- км

В колонке Пробег получим 2 км (суммарное расстояние между координатами без учета датчика пробега), в колонке Начальный пробег получим 10 км - рассчитанное по GPS-координатам значение до первого сообщения интервала, в колонке Конечный пробег получим 10 км + рассчитанное по GPS-координатам значение до последнего сообщения интервала.

В такой ситуации если из-за каких-то сбоев датчик пробега не работал и присылал 0 км, возможно возникновение отрицательных значений пробега:


В данном примере для объекта создан датчик пробега на основе параметра can_mileage, который отсутствует в сообщениях вплоть до 18.12.2019 16:38:54:


После 16:38 и далее параметр всегда имеет значение 0, а датчик, соответственно, — значение 0 км.

Возможные варианты решения:

  • Удалить датчик пробега и полностью перейти на пробег по GPS-координатам;
  • Устранить проблему на стороне оборудования или переключиться на параметр с корректными значениями.

В примере выше решением стало удаление датчика и переход только на GPS пробег, т. к. значения параметра не считывались с CAN-шины.

2. GPS + датчик зажигания

На корректность пробега при использованнии данного типа счетчика может оказывать влияние неустойчивая связь со спутниками, сбои в передаче данных, а также использование дополнительных датчиков. Однако существенным отличием от типа GPS и довольно частой причиной проблем в данном типе счетчика будет использование датчика зажигания, который работает некорректно. Рассмотрим этот вариант подробнее.

Некорректное значение датчика зажигания

В качестве счетчика пробега выбрана опция GPS + датчик зажигания. При построении трека (через вкладку Сообщения, Треки или Отчеты) пробег равен 0 км, при этом сам трек на карте виден:



Трек на карте строится по координатам из сообщений, в то время как алгоритм расчета пробега учитывает не только координаты и расстояние между сообщениями, но и проверяет, включено ли зажигание.

В данном примере для объекта не создан датчик с типом Зажигание, поэтому система игнорирует все сообщения и выводит 0 км пробега:


Возможные варианты решения:

  • Переключить счетчик пробега на GPS;
  • Добавить корректно работающий датчик зажигания.


В примере выше объект не присылает параметр, на основе которого можно определить состояние зажигания, потому проблема решена переключением на тип счетчика GPS.

3. Датчик пробега

Показания любых датчиков, в том числе пробега, могут быть подвержены таким внешним факторам, как отключение питания, наводки, неисправности в датчиках, ошибки калибровки и конфигураций датчиков/терминалов. Рассмотрим подробнее несколько примеров ошибок.

a. Сброс значений параметра пробега

Некоторые терминалы перестают передавать показания датчика пробега на короткий интервал времени (например, из-за отключения питания, наводок по цепи питания, иных проблем с оборудованием). В таких случаях накопленный суммарный пробег по объекту может отличаться от последнего доступного значения датчика:





В примере суммарный пробег по счетчику пробега составляет 26943 км, а по датчику пробега — всего 7069 км.

Причина  сброс параметра датчика пробега.


В такой ситуации происходит сброс до 0 км и далее снова рост до 6452 км (в примере такие сбросы повторялись неоднократно).

Возможные варианты решения:

  • Использовать Нижнюю границу в настройках датчика;
  • Использовать Валидацию, если сброс происходит при определенных обстоятельствах и удается выявить зависимость с другими параметрами (датчиками).

В примере выше достаточно применить нижнюю границу (0.01), т. к. сброс происходит произвольно и нет зависимости от других датчиков.





Таким образом посредством нижней границы удалось исключить нулевые значения (сброс до 0 км) и избежать некорректного расчета пробега.

b. Сообщения с одинаковой временной меткой (опция С переполнением включена)

Терминалы могут присылать сообщения слишком часто. Wialon имеет ограничение: не более 1 сообщения должно приходить от объекта за 1 секунду. При получении данных с большей частотой их хронология может быть нарушена и меньшее значение пробега может попасть в базу после сообщения с бо́льшим значением, пример на картинке ниже:


В таких ситуациях происходит переполнение счетчика до максимально возможного значения  2147483648.

Возможные варианты решения:

  • Отключить опцию С переполнением в настройках датчика (если была активирована).

В примере выше опция С переполнением была включена. Отключив ее, мы получили более корректное значение пробега:


с. Сообщения с одинаковой временной меткой (опция С переполнением выключена)

Сообщения могут приходить с одинаковой временной меткой, нарушая хронологию, например:

В целом, на картинке выше, пробег выглядит корректным  25.01 км, в отличие от предыдущего примера, где ошибка была очевидна. Однако, если взять из сообщений начальное значение датчика пробега на интервале  9917.81 км и конечное  9942.44 км, вычесть разницу, то получим пробег  24.63 км.

Разница составляет 0.38 км на относительно небольшом отрезке трека. Погрешность будет расти с увеличением объема данных (количеством поездок). Причина ошибки — это конечно же нарушение хронологии сообщений. Система ожидает, что значение датчика будут расти. В примере видим падение с 9931.03 км до 9930.85 км и последующий рост до 9931.29 км. Происходит повторный расчет пробега между сообщениями зо значением датчика 9930.85 км и 9931.29 км, т.е. добавляются лишние 0.44 км.

Возможные варианты решения:

  • Переключить счетчик пробега на GPS;
  • Устранить проблему на стороне оборудования;
  • Переключить датчик пробега на тип Относительный одометр и применить валидацию.

В примере выше удалось получить более корректные значения пробега с помощью перевода датчика пробега на тип Относительный одометр с добавлением валидации. Датчика относительного одометра основан на параметре в виде выражения: mileage-#mileage. Валидатор основан на параметре в виде выражения: time-#time. Нижняя граница для валидатора  0, a тип валидации  Проверка на неравенство нулю. Счетчик пробега во вкладке Основное переключен на  Относительный одометр.

После применения валидации, пробег составил  24.65 км. Сообщения, в которых временная метка совпадает, исключаются из расчета.

При возникновении вопросов по конкретным практическим случаям вы можете обратиться в техподдержку через почту support@wialon.com. Обязательно указывайте в вашем письме краткое описание ситуации со скриншотами, точное имя объекта, имя шаблона отчета для проверки, минимальный интервал времени для проверки (например, не месяц, а одни сутки), а также прочие важные детали.

Павел Чеботарёв,Инженер Customer Service

Контроль качества вождения
  • technical_consulting
  • eco_driving

Контроль качества вождения необходим, чтобы определять, кто из водителей помогает своей компании снижать затраты, а кто использует транспортное средство на износ. С помощью этого инструмента диспетчер может увидеть оценку качества вождения подотчетного ТС за любой промежуток времени и за каждую поездку в отдельности. В данной статье будут приведены теоретическая основа и практические рекомендации, важные для настройки контроля качества вождения.

Теоретическая основа

Ключевой характеристикой, которая помогает определить качество вождения, является ускорение. Эта физическая величина не кажется интуитивно понятной, поэтому в рамках обучения ее можно сравнить с более понятной величиной — скоростью.

Скорость и ускорение

Скорость характеризует изменение положения за определенный интервал времени:

v = S / Δt,

где v — скорость, S — пройденный путь за рассматриваемый интервал времени (можно сказать, что это разница пробега ТС в конце и в начале), Δt — длительность интервала.

Можно сказать, что данная формула определяет среднюю скорость в рамках поездки. Но чем меньший интервал времени рассматривается, тем больше результат будет приближаться к скорости, которая отображается на спидометре транспортного средства.

Ускорение характеризует изменение скорости за определенный интервал времени:

a = Δv / Δt,

где a — ускорение, Δv — разница скорости в конце и в начале рассматриваемого интервала времени, Δt — длительность интервала.

Среднее значение ускорения за поездку почти не используется при анализе движения автомобиля, поэтому имеет смысл вычислять только ускорение за минимальный интервал времени.

Единицы измерения

Единицей скорости в СИ служит метр в секунду (м/с), однако в повседневной жизни чаще используется внесистемная единица измерения километр в час (км/ч).

Единицей ускорения в СИ служит метр в секунду за секунду (м/с2), однако часто используется внесистемная единица измерения g (именно она применяется в Wialon).

g (произносится «же») — это ускорение свободного падения на поверхности Земли, равное 9.80665 м/с2 (часто используется приближение g ≈ 10 м/с2). В нашем случае это стандартная величина, на которую делят значение ускорения, чтобы сравнить с чем-то более привычным (как давление зачастую отображают не в паскалях, а в атмосферах).

Ускорение в 1 g соответствует разгону от 0 до 100 км/ч за 2.83 секунды.

Следующая таблица поможет сформировать представление о среднем значении ускорения при различных видах движения:

Вид движения

Среднее ускорение
м/с2g
Пассажирский лифт0.9—1.60.09—0.16
Поезд метро10.1
Бегун на коротких дистанциях1.50.15
Велосипедист1.70.17
Легковой автомобиль2.5—30.25—0.3
Мотоцикл3—60.3—0.6
Гоночный автомобиль8—90.8—0.9
Аварийное торможение автомобилядо 20до 2
Запуск и торможение космического корабля40—604—6
Маневр реактивного самолетадо 100до 10
 Пример расчета скорости и ускорения

По приведенным формулам рассчитаем скорость и ускорение, исходя из координат объекта, полученных от трекера.

В рамках примера будем отсчитывать время с 0 секунд. Для упрощения будем предполагать, что объект всегда двигался по прямой, а между сообщениями скорость транспортного средства менялась равномерно.

Номер сообщения12345678
Время, с0510204070100103
Путь, м002515040090014001430
Скорость, км/ч0018454560600
Ускорение, g0.0000.0000.1020.0770.0000.0140.000-0.567

На основе таблицы и графика можно зафиксировать следующие выводы:

  • Скорость равна 0, когда объект не меняет положение.
  • Ускорение равно 0, когда объект не меняет скорость (стоит на месте или движется с одинаковой скоростью).
  • Положительное значение ускорения соответствует увеличению скорости, а отрицательное — торможению.
  • По величине ускорения можно судить о том, насколько быстро и значительно изменилась скорость между сообщениями.

Данный пример позволяет оценить взаимосвязь положения, скорости и ускорения. Данные, приходящие от реального транспортного средства, могут отличаться от приведенных в примере, так как он содержит в себе условности и упрощения.

Акселерометры

Приборы для измерения ускорения называются акселерометрами. Современные технологии позволяют создавать миниатюрные акселерометры размером менее одного миллиметра. Они широко распространены и используются во множестве типов техники: смартфонах, фитнес-браслетах, трекерах, автомобилях и т. д.

Так как ускорение является векторной величиной, то есть оно имеет направление, то для его полноценного измерения требуется три акселерометра, установленных перпендикулярно друг другу. Вместе они формируют один трехосевой акселерометр, в котором, например, ось X показывает ускорение или торможение, ось Y — повороты, ось Z — подъемы и спуски.

Трекер с акселерометром или отдельный датчик-акселерометр могут иметь на корпусе нарисованные оси, по которым его нужно расположить на объекте.

Единого правила для направления или наименования осей не существует. То есть ось Z может быть направлена не вверх, а вниз, либо вместо оси X вперед может быть направлена ось Y. Узнать об этом вы можете из документации устройства.

При установке устройства на объект важно, чтобы оно было жестко зафиксировано.

Идеально ровно установить устройство на объект не получится, поэтому после установки необходимо осуществить калибровку. В общем случае процедура калибровки подразумевает несколько этапов: движение по прямой, повороты, плавное и резкое торможение, поездка без нарушений, поездка с нарушениями. Однако для разных устройств калибровка может значительно отличаться. Узнать о ней вы можете из документации устройства.

Так как в акселерометрах и трекерах используется одинаковая элементная база (микросхемы), то их показания не будут отличаться более чем на 15% (а при правильном выполнении калибровки это значение будет еще меньше).

Реализация в Wialon

Общую логику контроля качества вождения в Wialon можно представить в следующем виде:

  • В свойствах объекта на вкладке Качество вождения осуществляются настройки и создаются критерии, то есть правила, по которым далее будет происходить оценка.
  • Оценка сообщений по критериям происходит при выполнении отчета с определенными таблицами (одноименной Качество вождения или некоторыми другими) или при работе с приложением Eco Driving.

Далее внимание будет акцентировано на местах, которые чаще всего вызывают вопросы у пользователей.

Общий подход к настройке

В зависимости от того, какие данные приходят от трекера, настройка качества вождения должна осуществляться по-разному. Ниже будут описаны все существующие походы, отсортированные по точности от наибольшей к наименьшей.

Типы трекеровТочностьСложность настройкиРасчет ускорения поЧастота сообщенийСоздание датчиковКритерии для контроля ускорения

1. Трекер присылает рассчитанные параметры качества вождения

ВысокаяЛегкаяПараметрам качества вожденияЛюбаяНе требуетсяУскорение,
Торможение,
Поворот,
Резкое вождение

2. Трекер присылает рассчитанные параметры ускорения в произвольном формате

ВысокаяСредняяНеважноЛюбаяТребуетсяПроизвольный
3. Трекер присылает сырые значения ускорения по осямСредняяВысокаяНеважно1 раз в 2 секундыТребуетсяПроизвольный
4. Трекер ни в каком виде не присылает данные об ускоренииНизкаяЛегкаяGPS1 раз в 2 секундыНе требуетсяУскорение,
Торможение,
Поворот,
Резкое вождение

Далее приведем некоторые подробности по каждому из подходов:

1. Трекер присылает рассчитанные параметры качества вождения

Данный подход применим только для определенных типов устройств, которые используют особые алгоритмы обработки данных от акселерометра. Их список можно найти на сайте wialon.com в разделе Оборудование с помощью фильтра ECO driving.

В Wialon параметрами качества вождения называют параметры wln_accel_max, wln_brk_max и wln_crn_max. Упрощенно можно сказать, что эти параметры содержат в себе значения, соответствующие максимальному ускорению, зафиксированному между двумя последовательными сообщениями. Это позволяет настроить трекер на любую частоту сохранения сообщений без влияния на точность результата.

Такие параметры распознаются системой автоматически, поэтому никаких дополнительных датчиков создавать не нужно. Достаточно настроить расчет ускорения по параметрам качества вождения и создать критерии с типом Ускорение, Торможение, Поворот, Резкое вождение.

2. Трекер присылает рассчитанные параметры ускорения в произвольном формате

Подобные трекеры тоже используют особые алгоритмы обработки данных от акселерометра, что позволяет настроить трекер на любую частоту сохранения сообщений без влияния на точность результата.

Однако эти трекеры присылают информацию об ускорении в произвольном формате, а потому такие параметры не распознаются системой автоматически, поэтому для их учета необходимо создать датчики (логичнее всего выбрать тип Акселерометр), а затем на основе этих датчиков создать критерии с типом Произвольный.

3. Трекер присылает сырые значения ускорения по осям

Если трекеры не имеют особых алгоритмов обработки данных от акселерометра, то они присылают параметры с показаниями по трем осям в момент генерации сообщения. В таком случае чем выше будет частота сохранения сообщений, тем выше будет точность результата, однако это будет приводить к увеличению GPRS-трафика, затрачиваемого трекером. Рекомендуемая частота — 1 сообщение каждые 2 секунды.

Подобные параметры не распознаются системой автоматически, поэтому для их учета необходимо создать два датчика (логичнее всего выбрать тип Акселерометр): один будет основан на параметре от оси X (положительное значение будет соответствовать ускорению, а отрицательное — торможению), а второй будет основан на параметре от оси Y (положительное значение будет показывать поворот в одну сторону, а отрицательное — в другую). Ось Z, связанная с ускорением по вертикали, не будет использоваться для расчетов. Далее на основе этих двух датчиков создать критерии с типом Произвольный.

Для устройств данного типа может быть не предусмотрена процедура калибровки, из-за чего для получения точных показаний ускорения требуется индивидуальная настройка по каждой из осей.

Стоит повторить, что единого правила для направления или наименования осей не существует. Узнать направления осей вашего устройства можно из его документации.

4. Трекер ни в каком виде не присылает данные об ускорении

Если трекеры не имеют акселерометра, то есть не могут измерять ускорение, то его можно рассчитать математически по данным от GPS. В таком случае чем выше будет частота сохранения сообщений, тем выше будет точность результата, однако это будет приводить к увеличению GPRS-трафика, затрачиваемого трекером. Рекомендуемая частота — 1 сообщение каждые 2 секунды.

Далее необходимо настроить расчет ускорения по GPS и создать критерии с типом  Ускорение, Торможение, Поворот, Резкое вождение.

Если трекер не присылает информацию о направлении движения (параметр course), то система не сможет определить нарушения по критериям с типом Поворот.

Рекомендуемые значения критериев

Величина ускорения при управлении транспортным средством зависит от множества факторов: мощность двигателя, техническое состояние автомобиля, вес ТС, загруженность кузова, сцепление шин с дорогой, качество дорожного покрытия, метеорологическая обстановка и т. д. Из-за этого общих рекомендованных норм ускорения при вождении автомобиля не существует.

Источником информации о средних значениях ускорения в различных ситуациях (плавный разгон, резкий поворот, экстренное торможение и т. д.) может служить специализированная литература, в которой должна содержаться информация о конкретных моделях автомобилей. Также можно было бы подстраиваться под значения, которые используют страховые компании, однако в виду особенностей своей деятельности они не выкладывают подобную информацию в открытый доступ.

Исходя из этого стоит сформировать правильные ожидания от модуля Качество вождения: он позволяет детектировать нарушения в соответствии с настроенными критериями и выполнить сравнительную оценку нескольких объектов или водителей.

Шаблоны критериев

Для упрощения настройки критериев в Wialon имеется 3 стандартных шаблона: для легкового автомобиля, для грузового автомобиля и для автобуса. С их помощью можно получить сразу несколько критериев, которые можно оставить в исходном виде, либо немного поменять, либо просто использовать в качестве примера для самостоятельной настройки.

Если вы будете использовать стандартные шаблоны критериев для разных объектов, то, даже если вы не уверены в корректности значений в критериях, вы сможете увидеть относительную оценку, полученную по одинаковым правилам. Этого должно быть достаточно для сравнения в рамках одного автопарка.

Также хорошей рекомендацией является проверка критериев на практике. Для этого достаточно осуществить несколько поездок на транспортном средстве: в одной стоит придерживаться нормального стиля вождения, а в другой — попробовать совершить те самые нарушения, которые далее должны отслеживаться. После этого достаточно будет просмотреть сообщения от трекера или выполнить отчет с таблицей Качество вождения, чтобы определить значения ускорения при разном стиле езды, а потом на их основе определить границы для нарушений.

Олег Жарковский,Инженер Customer Service

10
  • 10
  • 25
  • 30
Спасибо за ваш отзыв!
Сообщить об ошибке
Текст с ошибкой Комментарий
Максимум 500 символов